package com.rzx.mybackend.utils;

import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * TimeStampUtils
 *
 * @author renzhexian
 * @date 2025/9/17
 */

public class TimeStampUtils {
    private static final DateTimeFormatter DEFAULT_FORMATTER =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    private static final DateTimeFormatter COMPACT_FORMATTER =
            DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    private static final DateTimeFormatter ISO_FORMATTER =
            DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");

    /**
     * 获取当前时间的毫秒时间戳字符串
     * @return 时间戳字符串 (如: "1726483200000")
     */
    public static String getCurrentTimestamp() {
        return String.valueOf(System.currentTimeMillis());
    }

    /**
     * 将时间戳转换为格式化字符串
     * @param timestamp 毫秒时间戳
     * @return 格式化的时间字符串 (如: "2025-09-15 14:30:25")
     */
    public static String formatTimestamp(long timestamp) {
        return formatTimestamp(timestamp, DEFAULT_FORMATTER);
    }

    /**
     * 将时间戳转换为指定格式的字符串
     * @param timestamp 毫秒时间戳
     * @param formatter 格式化器
     * @return 格式化的时间字符串
     */
    public static String formatTimestamp(long timestamp, DateTimeFormatter formatter) {
        return LocalDateTime.ofInstant(
                java.time.Instant.ofEpochMilli(timestamp),
                ZoneId.systemDefault()
        ).format(formatter);
    }

    /**
     * 获取当前时间的格式化字符串
     * @return 当前时间字符串 (如: "2025-09-15 14:30:25")
     */
    public static String getCurrentFormattedTime() {
        return LocalDateTime.now().format(DEFAULT_FORMATTER);
    }

    /**
     * 获取当前时间的紧凑格式字符串
     * @return 紧凑格式时间字符串 (如: "20250915143025")
     */
    public static String getCurrentCompactTime() {
        return LocalDateTime.now().format(COMPACT_FORMATTER);
    }

    /**
     * 获取当前时间的ISO格式字符串
     * @return ISO格式时间字符串 (如: "2025-09-15T14:30:25.123")
     */
    public static String getCurrentISOTime() {
        return LocalDateTime.now().format(ISO_FORMATTER);
    }

    /**
     * 将日期时间字符串转换为时间戳
     * @param dateTimeStr 日期时间字符串 (如: "2025-09-15 14:30:25")
     * @return 毫秒时间戳
     */
    public static long parseToTimestamp(String dateTimeStr) {
        LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, DEFAULT_FORMATTER);
        return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }

    /**
     * 生成带时间戳的唯一ID
     * @return 带时间戳的唯一ID字符串
     */
    public static String generateTimestampId() {
        return getCurrentCompactTime() + "-" + System.nanoTime() % 1000000;
    }
}
